package cn.pro.wyn.ref;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class AppCore {
    public static void main(String[] args) throws Exception {
        // TODO
        // 1. 通过反射得到 CoreService 类的实例 c
        // 2. 调用实例 c 的 say 方法并看到输出结果
        // 要求：不要使用 new 关键字
        Class<?> C = Class.forName("cn.pro.wyn.ref.CoreService");
        Object c = C.newInstance();
        // getDeclaredFields ：通过类对象获取该类下所有的字段
        Field[] fields = C.getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            // getType ：获取某个字段的类型，得到的是该类型的类对象
            Class<?> type = field.getType();
            if(type.toString().endsWith("CustomerService")) {
                Class<?> C0 = Class.forName("cn.pro.wyn.ref.CoreService");
                field.set(c, C0.newInstance());
            } else if (type.toString().endsWith("OrderService")) {
                Class<?> O = Class.forName("cn.pro.wyn.ref.OrderService");
                field.set(c, O.newInstance());
            } else if (type.toString().endsWith("UserService")) {
                Class<?> U = Class.forName("cn.pro.wyn.ref.UserService");
                field.set(c, U.newInstance());
            }
        }
        Method say = C.getMethod("say");
        say.invoke(c);

    }
}